
<html>
<head><title>Calculator</title></head>
<body>

<h1>Calculator</h1>
<p> by Vishnu Sundaresan </p>
Type an expression in the following box (e.g., 10.5+20*3/25).
<p>
<form action="index.php" method="get">
<input type="text" name="expr"/><input type="submit" value="Calculate"/>
</form>
</p>
<ul>
<li>Only numbers and +,-,* and / operators are allowed in the expression.
<li>The evaluation follows the standard operator precedence.
<li>The calculator does not support parentheses.
<li>The calculator handles invalid input "gracefully". It does not output PHP error messages.
</ul>
Here are some(but not limit to) reasonable test cases:
<ol>
  <li> A basic arithmetic operation:  3+4*5=23 </li>
  <li> An expression with floating point or negative sign : -3.2+2*4-1/3 = 4.46666666667, 3+-2.1*2 = -1.2 </li>
  <li> Some typos inside operation (e.g. alphabetic letter): Invalid input expression 2d4+1 </li>
</ol>
</body>
<?php 
$name = $_GET["expr"]; 
for($i=0; $i<strlen($name); $i++) if($name[$i]!=' ') $new = $new . $name[$i];
if($name){
	print "<h2>Result</h2>";
	$matches = preg_match('/^([-]?[0-9]+\.?[0-9]*[+\-*\/]?)*[-]?[0-9]*\.?[0-9]+$/', $new);
}
$valid =true;
for($j=0; $j<strlen($new)-1; $j++) if($new[$j]=='-' && $new[$j+1]=='-') $valid = false;
if($matches==1 && $valid!=false){
	$valid = @eval("\$result = $new;");
	print $name . "=" . $result;
}
else print "Invalid expression: $name";
?>
</body>
</html>
